jmeter 提取响应头中的set

您所在的位置:网站首页 response header set-cookie jmeter 提取响应头中的set

jmeter 提取响应头中的set

2023-09-07 09:29| 来源: 网络整理| 查看: 265

性能测试时,有一个登录接口, 登录成功后,会返回一个登录凭证token。但这个token不是在响应应答里面返回而是在响应头里面会返回一个set-cookie,如下:

HTTP/1.1 200 OK Server: hsiar Date: Fri, 30 Oct 2020 03:24:14 GMT Content-Type: application/json;charset=utf-8 Transfer-Encoding: chunked Connection: keep-alive Set-Cookie: token=6e204d9b-103a-431e-b8de-ba97b2d1; path=/; HttpOnly Access-Control-Allow-Origin: 192.168.xx.xxx Access-Control-Allow-Methods: GET,POST Access-Control-Allow-Headers: x-msg-timeout,X-Msg-Trace,csrfcheck,ShardingInfo,Partition,broker_key,X-Original-URI,X-Request-Method,Authorization,access_token,login_account,auth_password,user_type,tenant_id,auth_code,Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With Allow: POST,GET,OPTIONS Access-Control-Allow-Credentials: true Access-Control-Expose-Headers: x-msg-timeout,X-Msg-Trace,csrfcheck,ShardingInfo,Partition,Date,Server

一看, 这个也很easy,通过python+requests库,获取到响应头,直接解析出来即可;这样能快速获取到大量的登录凭证;所以产生了如下代码:

# -*- coding: utf-8 -*- import json import requests __author__ = "chenk" class Interfaces: """接口请求类""" ANALYSIS_FC_PREFIX = "http://10.20.xx.xxx:xx/f" SERVICE_MALL_PREFIX = "http://10.20.xx.xxx:xx/" HEADERS = {"Content-Type": "application/json", "Accept": "application/json"} def __init__(self): pass def request(self, url, data, is_get_method=True, verify=False, headers={}): # print("Will Reuqeuest Interface: {}".format(url)) # print("Augues as follows: \n{}".format(data)) if not headers: headers = Interfaces.HEADERS if is_get_method: r = requests.get(url=url, headers=headers, verify=verify, params=data) else: r = requests.post(url=url, headers=headers, verify=verify, params=data, data=data) result = r.headers # print("Response: \n{}".format(result)) return result import time interfaces = Interfaces() if __name__ == "__main__": url = "http://10.20.xx.xx:xxx/g/cultivate-user-service/v/appauth/login" data = {"mobile": "18255000000", "fund_account": "55000000", "cid": "55000000", "client_id": "55000000", } count = 1 # count = 2 start = 1 run_time = 0 # f = open(file=r"D:\jmeter\apache-jmeter-5.0\bin\token.txt", mode="w") while count: # data.update({"code": str(start+run_time)}) result = interfaces.request(url=url, data=data, is_get_method=True) for k, v in result.items(): print(k, v) # print(requests.utils.dict_from_cookiejar(result)) count -= 1 # run_time += 1 # try: # token = result.get("data").get("token") # f.write(token + "\n") # except Exception as e: # print(str(e)) # print("data:", data) # print("result: ", result) # continue # time.sleep(0.01) # f.close() print("done!")

执行结果中,发现所有响应头都返回了, 就是没有set-cookie这玩意,通过jmeter调用的时候,发现能够获取到, 故先不纠结python里面为啥获取不到,先保证手头工作要紧,毕竟打工人; jmeter里面就两个地方需要注意: 1.响应头中的token获取 我这边用了一个后置处理器——正则提取器,提取设置如下: 正则提取 提取完毕后, 如何保存token值到一个文件里面? 2.保存提取的token数据 使用BeanShell Sampler, 编写一个简单类,代码如下:

FileWriter fstream = new FileWriter("E://token.csv", true); BufferedWriter out = new BufferedWriter(fstream); out.write( vars.get("get_token")); out.write(System.getProperty("line.separator")); out.close(); fstream.close();

FileWriter 创建了一个对象, 并指定文件存储路径为:E://token.csv; jmeter中的变量可通过 vars.get(“变量名”)获取变量值; System.getProperty(“line.separator”) 会在token写入后,换行,根据实际调整; 注意:上述代码会默认在尾部追加的形式写入文件;若不需要,可以直接删除文件直接生成,也可以更改代码中文件对象的写入方式; 最终程序执行完毕, 快速生成了一个存储了2万个token的文件,大工告成: token



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3